Add setMemory function to Javascript Agent

Paul Platenius 8 years ago
parent
commit
da833b13bb
2 changed files with 26 additions and 2 deletions
  1. 10 2
      app/models/agents/java_script_agent.rb
  2. 16 0
      spec/models/agents/java_script_agent_spec.rb

+ 10 - 2
app/models/agents/java_script_agent.rb

@@ -21,6 +21,7 @@ module Agents
21 21
       * `this.memory()`
22 22
       * `this.memory(key)`
23 23
       * `this.memory(keyToSet, valueToSet)`
24
+      * `this.setMemory(object)` (sets the memory to the values of the input object)
24 25
       * `this.deleteKey(key)` (deletes a key from memory and returns the value)
25 26
       * `this.credential(name)`
26 27
       * `this.credential(name, valueToSet)`
@@ -115,9 +116,12 @@ module Agents
115 116
       context["doLog"] = lambda { |a, x| log x }
116 117
       context["doError"] = lambda { |a, x| error x }
117 118
       context["getMemory"] = lambda { |a| memory.to_json }
118
-      context["setMemory"] = lambda do |a, x, y|
119
+      context["setKey"] = lambda do |a, x, y|
119 120
         memory[x] = clean_nans(y)
120 121
       end
122
+      context["setMemory"] = lambda do |a, x|
123
+        memory.replace(clean_nans(x))
124
+      end
121 125
       context["deleteKey"] = lambda { |a, x| memory.delete(x).to_json }
122 126
       context["escapeHtml"] = lambda { |a, x| CGI.escapeHTML(x) }
123 127
       context["unescapeHtml"] = lambda { |a, x| CGI.unescapeHTML(x) }
@@ -165,7 +169,7 @@ module Agents
165 169
 
166 170
         Agent.memory = function(key, value) {
167 171
           if (typeof(key) !== "undefined" && typeof(value) !== "undefined") {
168
-            setMemory(key, value);
172
+            setKey(key, value);
169 173
           } else if (typeof(key) !== "undefined") {
170 174
             return JSON.parse(getMemory())[key];
171 175
           } else {
@@ -173,6 +177,10 @@ module Agents
173 177
           }
174 178
         }
175 179
 
180
+        Agent.setMemory = function(obj) {
181
+          setMemory(obj);
182
+        }
183
+
176 184
         Agent.credential = function(name, value) {
177 185
           if (typeof(value) !== "undefined") {
178 186
             setCredential(name, value);

+ 16 - 0
spec/models/agents/java_script_agent_spec.rb

@@ -212,6 +212,22 @@ describe Agents::JavaScriptAgent do
212 212
       end
213 213
     end
214 214
 
215
+    describe "setMemory" do
216
+      it "stores an object" do
217
+        @agent.options['code'] = 'Agent.check = function() {
218
+          var u = {};
219
+          u["one"] = 1;
220
+          u["two"] = 2;
221
+          this.setMemory(u);
222
+          };'
223
+        @agent.save!
224
+        @agent.check
225
+        expect(@agent.memory).to eq({ "one" => 1, "two" => 2 })
226
+        @agent.save!
227
+        expect { @agent.reload.memory }.not_to raise_error
228
+      end
229
+    end
230
+
215 231
     describe "deleteKey" do
216 232
       it "deletes a memory key" do
217 233
         @agent.memory = { foo: "baz" }